package com.tbit.main.service;

import com.tbit.main.pojo.*;
import com.tbit.main.pojo.VO.EditOrderReqVO;
import com.tbit.main.pojo.VO.RideLogReqVO;
import com.tbit.main.pojo.VO.RideLogRespVO;

import java.util.Date;
import java.util.List;

/**
 * 设备service
 *
 * @author Leon
 * 2019年11月9日 下午4:08:03
 */
public interface RideLogService {

    /**
     * 查询设备最后一个订单
     *
     */
    RideLog findLastByMachineId(Integer machineId);

    /**
     * 根据时间统计
     *
     */
    RideSta staByTime(Integer accountId, String startTime, String endTime);

    /**
     * 根据时间统计
     *
     */
    RideSta staRegionIdByTime(Integer regionId, String startTime, String endTime);

    /**
     * 根据时间统计，运营区域集合
     *
     */
    RideSta staByTimeByAccountIds(List<Integer> accountIds, String startTime, String endTime);

    /**
     * 根据时间统计，运营区域集合,分组
     *
     */
    List<RideSta> staByTimeByAccountIdsGroup(List<Integer> accountIds, String startTime, String endTime);

    /**
     * 运营区域根据时间统计
     *
     */
    RideSta staByAccountId(Integer accountId);

    /**
     * 统计未支付订单
     *
     */
    RideSta staNotPayByTime(Integer accountId, String startTime, String endTime);

    /**
     * 统计补交订单
     *
     */
    RideSta staAfterPayByTime(Integer accountId, String startTime, String endTime);

    /**
     * 根据订单号查询
     *
     */
    RideLog getByOrderNO(String orderNO);

    /**
     * 根据订单号批量查询
     *
     */
    List<RideLog> getByOrderNOs(List<String> orderNOs);

    /**
     * 添加调度费用日志
     *
     */
    void addDispatchLog(OrderDispatchLog orderDispatchLog);

    /**
     * 数量统计
     *
     */
    Integer statByParkCount(Integer accountId, Integer type, String startTime, String endTime);

    /**
     * 分页统计
     *
     */
    List<StatPark> statByPark(Integer accountId, Integer type, String startTime, String endTime, Integer pageNO, Integer rowCount);

    /**
     * 根据品牌查询订单信息
     *
     */
    RideSta getByAccountId(Integer accountId);

    /**
     * 根据运营区域批量查询订单信息
     *
     */
    RideSta getByAccountIds(List<Integer> accountId);

    /**
     * 根据用户码查询订单
     *
     */
    List<RideLog> getByMachineId(Integer machineId, Integer userId, String startTime, String endTime);

    /**
     * 获取在骑订单
     *
     */
    List<RideLog> getBorrow();

    /**
     * 查询里程新增
     *
     */
    Integer newMile(Integer accountId, String startTime, String endTime);

    /**
     * 查询总里程
     *
     */
    Integer newDayMile(List<Integer> accountIds, String startTime, String endTime);

    /**
     * 根据车辆id和时间查询
     *
     */
    List<RideLog> getMachineIdStartTime(Integer machineId, String startTime, String endTime);

    /**
     * 计算时间
     */
    List<Integer> getMachineIdTime(Integer machineId, String startTime, String endTime);

    /**
     * 新增公里里程
     *
     */
    List<AccountDayStat> statYesterdayOrderGroupBy(String startTime, String endTime);

    /**
     * 人工结束订单
     *
     */
    Integer finishOrder(AccountUser accountUser, FinishOrderDTO finishOrderDTO, Integer accountId, Integer rideCardId, Integer vipId, Integer couponUserId);

    /**
     * 获取当前时间后最新一条骑行记录的开始时间
     */
    Date getAfterLatest(String time, Integer machineId);

    PageResult<RideLogRespVO> getRideLogPage(RideLogReqVO reqVO);

    List<RideLog> getUserCode(String codePhone, String startTime, String endTime, AccountUser accountUser);

    /**
     * 根据车辆编号查询最近骑行用户
     *
     * @param machineId    用户码
     * @param regionId    分区id
     * @param pageNO 页码
     * @param rowCount 条数
     * @return List {@link RideLog}
     */
    List<RideLog> getRecentUser(Integer machineId, Integer regionId, Integer pageNO, Integer rowCount);

    /**
     * 修改订单金额
     * @param reqVO 请求
     */
    void editOrder(EditOrderReqVO reqVO);
    /**
     * 根据用户id查询用户最近一笔订单
     *
     * @param userId 用户id
     * @return RideLog
     */
    RideLog getRecentOrderByUserId(Integer userId);
    /**
     * 查询用户所有骑行订单详情
     *
     * @param userId 用户id
     */
    PageResult<RideLogRespVO> getRideLogByUserId(Integer userId, Integer pageNO, Integer rowCount);
}